# _*_ coding: UTF-8 _*_
# @Time     : 2021/10/25 11:25
# @Author   : Gong Yangyi
# @Site     : http://www.hzdledu.cn/
# @File     : homework4.py
# @Software : PyCharm

# 2. 练习：将列表[45,23,2,5,3,2,6,45,43,21,66,2,3,2]进行从小到大排序，不能用sort()函数，
# 1.冒泡排序：通过对相邻的两个数比较大小，较大(较小)数和后一个数交换位置，实现列表的整体有序
list1 = [45, 23, 2, 5, 3, 2, 6, 45, 43, 21, 66, 2, 3, 2]
for i in range(len(list1) - 1):  # 外层循环决定比较的次数
    for j in range(len(list1) - i - 1):#内层循环决定每次比较哪些数
        if list1[j] > list1[j + 1]:#比较相邻两个数，前一个数较大就和后一个数交换位置
            temp = list1[j]
            list1[j] = list1[j + 1]
            list1[j + 1] = temp
        print(f'第{i}:次循环：{list1}')
print(list1)

# 3、求 100-200以内同时能被7、8整除的数
list1=[]
for i in range(100,201):
    if i%7==0 and i%8==0:
       list1.append(i)
print(list1)

# 4.找出一个列表中，只出现了一次的数字，并且保持原来的次序，例如[1,2,1,3,2,5]结果为[3,5]
list1=[1,2,1,3,2,5]
list2=[]
for x in list1:
    if list1.count(x)==1:
       list2.append(x)
print(list2)
# 提升
# 5、求 0 -1 + 2 - 3 + 4 - 5 + 6 -7.... + 100
sum2=sum(range(0,101,2))-sum(range(1,100,2))
print(sum2)

# 6.求100以内的素数：>1整数，只能被1和自己整除
prime=[]
for i in range(2,101):
    num=0
    for j in range(1,i+1):
        if i%j==0:
            num+=1
    if num ==2:
        prime.append(i)
print(prime)

prime = []
for i in range(2, 101):
    isPrime = True
    for j in range(2, i):
        if i % j == 0:
            isPrime=False
            break
    if isPrime== 2:
        prime.append(i)
print(prime)


# 7. 水仙花数：水仙花数是指一个 n 位数 ( n 大于等于 3 )，它的每个位上的数字的 n 次幂之和等于它本身。
# # （例如：1的3次方 + 5的三次方 + 3三次方 = 153）。根据这个要求，打印所有三位数的水仙花数
list1=[]
for i in range(100,1000):
     a=i//100
     b=(i//10)%10
     c=i%10
     if i==(a**3+b**3+c**3):
         list1.append(i)
print(list1)

list1 = []
for i in range(100, 1000):
    i = str(i)
    a = int(i[0])
    b = int(i[1])
    c = int(i[2])
    if a ** 3 + b ** 3 + c ** 3 == int(i):
        list1.append(int(i))
print(list1)

# 8.一球从100米高度自由落下，每次落地后反跳回原高度的一半，再落下。
# 求它在 第10次落地时，共经过多少米？第10次反弹多高？
height=100
sum1=100
for i in range(9):
    height=height/2
    sum1+=height*2
print(f'一共经过{sum1}米，第10次反弹{height/2}米')

# 9. 随机产生20个100-200之间的正整数存放到列表中，
# 并求列表中的所有元素最大值、最小值、平均值，然后将各元素的与平均值的差组成一个列表
import  random
#产生随机数
num=random.randint(100,200)
list1=[]
for i in range(20):
    num= random.randint(100,200)
    list1.append(num)
print(list1)

max1=max(list1)
print(max1)
min1=min(list1)
print(min1)
avg=sum(list1)/len(list1)
print(avg)
